Utilisation de MC_DigitalCamSwitch_HighPrecision
L'exemple BasicMotion_DigitalCamSwitch_HighPrecision.project
se trouve dans le répertoire d'installation CODESYS sous ..\CODESYS SoftMotion\Examples
.
Cet exemple montre comment utiliser les sorties de SMC_DigitalCamSwitch_HighPrecision
pour contrôler les sorties numériques avec une résolution temporelle élevée. Les terminaux EL2258 et EL2252 de Beckhoff sont utilisés à titre d'
Avis
Les descriptions des appareils fournies par Beckhoff ne sont pas incluses dans l'exemple. Vous pouvez les télécharger directement auprès du fournisseur et les installer dans le référentiel des appareils. Pour exécuter cet exemple, vous avez besoin d'un coupleur de bus EK1100, d'une borne EL2258 et d'une borne EL2252
Important
Cet exemple a été développé et testé conformément à la révision 0017 de l'EL2258 et à la révision 0020 de l'EL2252. Cela ne sert qu'à titre d'exemple. Nous n'en garantissons pas l'exactitude. Le code source doit être testé avant utilisation. Si nécessaire, il doit être modifié pour d'autres révisions des terminaux.
Structure de la demande
L'application se compose d'un Main
programme, le DigitalCamSwitch_EL2258
et DigitalCamSwitch_EL2252
des blocs fonctionnels et un coupleur de bus EK1100 avec les bornes de sortie EL2258 et EL2252.
Le DigitalCamSwitch_EL2258
et DigitalCamSwitch_EL2252
les blocs fonctionnels sont les éléments essentiels de l'exemple. Ils montrent comment utiliser Events
sortie de SMC_DigitalCamSwitch_HighPrecision
pour programmer des sorties numériques. Les blocs fonctionnels doivent être compris comme des exemples qui peuvent être adaptés à d'autres matériels.
DigitalCamSwitch_EL2258
Le bloc de fonction est initialisé sur un front montant au
Enable
entrée. Dans leSTATE_INIT_0
etSTATE_INIT_1
états, lesOutputBufferReset
les signaux du terminal EL2258 sont écrits etaLastEventIds
tableau est initialisé. L'ID du dernier événement traité pour chaque piste est enregistré dans ce tableau. Cela permet d'éviter qu'un événement soit transféré plusieurs fois au terminal.Une fois initialisé (
STATE_ACTIVE
), toutes les pistes sont traitées à tour de rôle et la logique suivante est exécutée pour chaque piste :Vérifiez si le terminal EL2258 a déjà accepté les derniers événements commandés (
ChannelsIn[channel].OutputOrderFeedback = ChannelsOut[channel].OutputOrderCounter
).Parcourez tous les événements de la piste. Seuls les événements dont
ToggleEventId
est supérieur au dernier identifiant traité sont pris en compte ultérieurement. (RequêteEventId_GreaterThan(event^.ToggleEventId, aLastEventIds[channel])
)Voir la section : « Remarque sur l'ordre des événements ».
Convertissez le
Duration
de l'événement dans un horodatage EtherCAT et écriture correspondante duChannelsOut[channel].OutputEventState
etChannelsOut[channel].OutputEventTime
sorties.Interrompez le traitement après un maximum de 5 événements.
Avertissez le terminal de l'existence de nouveaux événements si au moins un événement a été détecté (
ChannelsOut[channel].OutputOrderCounter := ChannelsOut[channel].OutputOrderCounter + 1
).
Remarque sur l'ordre des événements
Les événements sont renvoyés par SMC_DigitalCamSwitch_HighPrecision
bloc fonctionnel pour chaque piste d'un tableau. SwitchNumber
et un ToggleEventId
sont remboursés pour chaque événement. ToggleEventId
est unique et ascendante pour chaque piste.
Pour plus d'informations, voir : ÉVÉNEMENT SMC_CAMSWITCH_TOGGLE_EVENT.
Dans l'exemple, aLastEventIds[trackNo]
le tableau stocke pour chaque piste qui ToggleEventId
a été transféré pour la dernière fois au terminal lors d'un appel de bloc fonctionnel précédent. Parce que le ToggleEventIds
sont classés par ordre croissant, le prochain appel saura exactement quels événements doivent encore être transférés.
Parce que l'on ne sait pas à quel moment
ToggleEventId
les événements commencent, unvalid
le drapeau est enregistré dansEventId
type de données en plus de l'ID. Pour leEventId_GreaterThan
comparaison, cettevalid
le drapeau est pris en compte en conséquence.Le
ToggleEventIds
avoir le type de données 32 bitsUDINT
et peuvent donc, en principe, déborder avec une durée de fonctionnement respectivement longue ou une fréquence de commutation élevée. La valeur passe ensuite de 2^32-1 à 0. La fonction de comparaisonEventId_GreaterThan
prend également en compte les dépassements de 32 bits.
Cartographie PDO EL2258
Le ChannelsOut
et ChannelsIn
sorties du DigitalCamSwitch_EL2258
les blocs fonctionnels sont connectés aux canaux d'E/S respectifs de la borne EL2258. L'image suivante montre les mappages pour le canal 1. Le canal 2 est similaire ; uniquement lors de l'accès ChannelsOut
et ChannelsIn
l'indice est 2 et non 1.

DigitalCamSwitch_EL2252
Le principe de base est identique à DigitalCamSwitch_EL2258
. La différence réside dans la façon dont les signaux sont écrits, car le terminal EL2252 ne peut programmer qu'un seul événement actif
Tout d'abord, le bloc fonctionnel est initialisé dans
STATE_INIT
.Puis
STATE_CHECK_FOR_EVENT
vérifie si les événements provenant duSMC_DigitalCamSwitch_HighPrecision
le bloc de fonction est en attente.Si un événement est disponible, il doit être programmé en deux cycles :
Les sorties et l'horodatage EtherCAT sont écrits au cours du premier cycle.
Activate
la sortie est réglée sur 0.Au cours du deuxième cycle,
Activate
la sortie est réglée sur 3STATE_ACTIVATE_EVENT_IN_EL2252
. Cela active l'événement dans le terminal.
Dans
STATE_WAIT_UNTIL_THE_INPUTS_MATCH_THE_OUTPUTS
, le système attend ensuite que l'événement soit exécuté. Les signaux provenant duFeedback
les entrées du terminal sont utilisées pour cela.
Cartographie PDO EL2252

Main
Dans le programme principal, quatre commutateurs sont configurés (deux sur chaque piste). Les pistes ont également différentes compensations activées/désactivéesOnComp
, OffComp
) :

Le programme inclut les appels de blocs fonctionnels nécessaires pour activer une prévision pour l'axe et le déplacer constamment à 180°/s (*), ainsi que pour SMC_DigitalCamSwitch_HighPrecision
, DigitalCamSwitch_EL2258
, et DigitalCamSwitch_EL2252
. Avant de démarrer le mouvement, le bus de terrain doit être complètement mis sous tension. Dans le cas contraire, les événements ne peuvent pas être transmis au terminal.
(*) Le mouvement constant a été choisi pour que l'exemple reste simple et clair. Cependant, le SMC_DigitalCamSwitch_HighPrecision
bloc fonctionnel fonctionne avec tous les types de mouvements. Par exemple, il fournit également des horodatages exacts lors d'une phase d'accélération ou avec
Mise en service
Créez l'application et téléchargez-la sur une manette.
Démarrez l'application.